package com.eliza.kotlin.design.creation.factory.method_4

/**
 * @version v1.0
 * @ClassName: CoffeeFactory 工厂方法模式
 * @Description: CoffeeFactory ： 抽象工厂::使用工厂方法模式就可以完美的解决，完全遵循开闭原则
 * @Author: 黑马程序员
 */
/**
 * 将工厂 抽象化
 * 利用 接口的 多态 模式
 * 工厂方法模式的主要角色：
 * * 抽象工厂（Abstract Factory）：提供了创建产品的接口，调用者通过它访问具体工厂的工厂方法来创建产品。
 * * 具体工厂（ConcreteFactory）：主要是实现抽象工厂中的抽象方法，完成具体产品的创建。
 * * 抽象产品（Product）：定义了产品的规范，描述了产品的主要特性和功能。
 * * 具体产品（ConcreteProduct）：实现了抽象产品角色所定义的接口，由具体工厂来创建，它同具体工厂之间一一对应。
 */
interface CoffeeFactory {
    //创建咖啡对象的方法
    fun createCoffee(): Coffee
}
/**
* --》 前提：一个工厂只生产一种产品
* */
internal class AmericanCoffeeFactory : CoffeeFactory {
    override fun createCoffee(): Coffee {
        return AmericanCoffee()
    }
}

internal class LatteCoffeeFactory : CoffeeFactory {
    override fun createCoffee(): Coffee {
        return LatteCoffee()
    }
}